In modern read channels for flash memories, hard-decision information and soft-decision information can be provided for each stored bit. Some conventional error correcting codes utilize the soft-decision information to aid in recovering the bits. However, the soft-decision codes usually have error floors (i.e., a less-steep bit-error-rate curve in a high signal-to-noise region) due to relatively small minimum distances and trapping sets. The error floors create problems in storage applications where specified output bit-error rates are commonly small. Conventional algebraic codes use only the hard-decision information and do not suffer from the error floors. However, the algebraic codes have a bit-error-rate performance loss in a waterfall region (i.e., a low signal-to-noise region) compared with the soft-decision information-based codes.